--- /dev/null
+../src/slist/slist.c
+../src/ctree/ctree.c
+../src/xpath/xpath.c
+../src/xmath/xmath.c
+../src/qpack/qpack.c
+../src/imap/imap.c
+../src/llist/llist.c
+../src/logger/logger.c
+../src/strextra/strextra.c
+../src/cfgparser/cfgparser.c
+../src/owcrypt/owcrypt.c
+../src/cexpr/cexpr.c
+../src/expr/expr.c
+../src/timeit/timeit.c
+../src/iso8601/iso8601.c
+../src/lock/lock.c
+../src/procinfo/procinfo.c
+../src/siri/async.c
+../src/siri/backup.c
+../src/siri/buffersync.c
+../src/siri/err.c
+../src/siri/heartbeat.c
+../src/siri/optimize.c
+../src/siri/siri.c
+../src/siri/version.c
+../src/siri/net/bserver.c
+../src/siri/net/clserver.c
+../src/siri/net/pkg.c
+../src/siri/net/promise.c
+../src/siri/net/promises.c
+../src/siri/net/protocol.c
+../src/siri/net/stream.c
+../src/siri/net/tcp.c
+../src/siri/net/pipe.c
+../src/siri/db/access.c
+../src/siri/db/aggregate.c
+../src/siri/db/auth.c
+../src/siri/db/buffer.c
+../src/siri/db/db.c
+../src/siri/db/ffile.c
+../src/siri/db/fifo.c
+../src/siri/db/forward.c
+../src/siri/db/group.c
+../src/siri/db/groups.c
+../src/siri/db/initsync.c
+../src/siri/db/insert.c
+../src/siri/db/listener.c
+../src/siri/db/lookup.c
+../src/siri/db/median.c
+../src/siri/db/misc.c
+../src/siri/db/nodes.c
+../src/siri/db/pcache.c
+../src/siri/db/points.c
+../src/siri/db/pool.c
+../src/siri/db/pools.c
+../src/siri/db/presuf.c
+../src/siri/db/props.c
+../src/siri/db/queries.c
+../src/siri/db/query.c
+../src/siri/db/re.c
+../src/siri/db/reindex.c
+../src/siri/db/replicate.c
+../src/siri/db/series.c
+../src/siri/db/server.c
+../src/siri/db/servers.c
+../src/siri/db/shard.c
+../src/siri/db/shards.c
+../src/siri/db/tasks.c
+../src/siri/db/time.c
+../src/siri/db/user.c
+../src/siri/db/users.c
+../src/siri/db/variance.c
+../src/siri/db/walker.c
+../src/siri/file/handler.c
+../src/siri/file/pointer.c
+../src/siri/admin/account.c
+../src/siri/admin/client.c
+../src/siri/admin/request.c
+../src/siri/help/help.c
+../src/siri/cfg/cfg.c
+../src/siri/grammar/grammar.c
\ No newline at end of file
--- /dev/null
+#include "../test.h"
+#include <locale.h>
+#include <siri/db/series.h>
+
+
+static int test_series_ensure_type(void)
+{
+ test_start("siridb (series_ensure_type)");
+
+ siridb_series_t series;
+ qp_obj_t qp_obj;
+
+ /* test with integer series */
+ {
+ series.tp = TP_INT;
+
+ qp_obj.tp = QP_INT64;
+ qp_obj.via.int64 = -1;
+ siridb_series_ensure_type(&series, &qp_obj);
+ _assert (qp_obj.tp == QP_INT64);
+ _assert (qp_obj.via.int64 == -1);
+
+ qp_obj.tp = QP_DOUBLE;
+ qp_obj.via.real = -1.0;
+ siridb_series_ensure_type(&series, &qp_obj);
+ _assert (qp_obj.tp == QP_INT64);
+ _assert (qp_obj.via.int64 == -1);
+
+ qp_obj.tp = QP_RAW;
+ qp_obj.via.str = "55 percent";
+ siridb_series_ensure_type(&series, &qp_obj);
+ _assert (qp_obj.tp == QP_INT64);
+ _assert (qp_obj.via.int64 == 55);
+
+ qp_obj.tp = QP_RAW;
+ qp_obj.via.str = "garbage";
+ siridb_series_ensure_type(&series, &qp_obj);
+ _assert (qp_obj.tp == QP_INT64);
+ _assert (qp_obj.via.int64 == 0);
+ }
+
+ /* test with double series */
+ {
+ series.tp = TP_DOUBLE;
+
+ qp_obj.tp = QP_DOUBLE;
+ qp_obj.via.real = -1.1;
+ siridb_series_ensure_type(&series, &qp_obj);
+ _assert (qp_obj.tp == QP_DOUBLE);
+ _assert (qp_obj.via.real == -1.1);
+
+ qp_obj.tp = QP_INT64;
+ qp_obj.via.int64 = -1;
+ siridb_series_ensure_type(&series, &qp_obj);
+ _assert (qp_obj.tp == QP_DOUBLE);
+ _assert (qp_obj.via.real == -1.0);
+
+ qp_obj.tp = QP_RAW;
+ qp_obj.via.str = "0,5 percent";
+ siridb_series_ensure_type(&series, &qp_obj);
+ _assert (qp_obj.tp == QP_DOUBLE);
+ _assert (qp_obj.via.real == 0.5);
+
+ qp_obj.tp = QP_RAW;
+ qp_obj.via.str = "garbage";
+ siridb_series_ensure_type(&series, &qp_obj);
+ _assert (qp_obj.tp == QP_DOUBLE);
+ _assert (qp_obj.via.real == 0.0);
+ }
+
+ /* test with string series */
+ {
+ series.tp = TP_STRING;
+
+ qp_obj.tp = QP_RAW;
+ qp_obj.via.str = "55.3 percent";
+ qp_obj.len = strlen(qp_obj.via.str);
+ siridb_series_ensure_type(&series, &qp_obj);
+ _assert (qp_obj.tp == QP_RAW);
+ _assert (strlen("55.3 percent") == qp_obj.len);
+ _assert (strncmp("55.3 percent", qp_obj.via.str, qp_obj.len) == 0);
+
+ qp_obj.tp = QP_RAW;
+ qp_obj.via.str = "";
+ qp_obj.len = strlen(qp_obj.via.str);
+ siridb_series_ensure_type(&series, &qp_obj);
+ _assert (qp_obj.tp == QP_RAW);
+ _assert (strlen("") == qp_obj.len);
+ _assert (strncmp("", qp_obj.via.str, qp_obj.len) == 0);
+
+ qp_obj.tp = QP_DOUBLE;
+ qp_obj.via.real = -1.1;
+ siridb_series_ensure_type(&series, &qp_obj);
+ _assert (qp_obj.tp == QP_RAW);
+ _assert (strlen("-1,100000") == qp_obj.len);
+ _assert (strncmp("-1,100000", qp_obj.via.str, qp_obj.len) == 0);
+
+ qp_obj.tp = QP_INT64;
+ qp_obj.via.int64 = -1;
+ siridb_series_ensure_type(&series, &qp_obj);
+ _assert (qp_obj.tp == QP_RAW);
+ _assert (strlen("-1") == qp_obj.len);
+ _assert (strncmp("-1", qp_obj.via.str, qp_obj.len) == 0);
+ }
+
+ return test_end();
+};
+
+int main()
+{
+ (void) setlocale(LC_ALL, "");
+
+ return (
+ test_series_ensure_type() ||
+ 0
+ );
+};
\ No newline at end of file